#include "login_window.h"
#include "ui_login_window.h"


login_window::login_window(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::login_window)
{
    ui->setupUi(this);
    main_function *m_function = new main_function();//初始化主功能界面
    this->setWindowTitle("系统登录");
    this->setWindowIcon(QPixmap("://pic//wall//1.png"));
    //因为 ui 里面的密码可以输入 中文，这是不可取的，因此我们需要改变 其属性
    ui->num_text->setAttribute(Qt::WA_InputMethodEnabled,false);//设置登录界面账号属性
    ui->num_text->setMaxLength(10);//设置账号最大长度
    ui->pwd_text->setAttribute(Qt::WA_InputMethodEnabled,false);//设置登录界面密码属性
    ui->pwd_text->setMaxLength(8);//设置密码最大长度
    //登录按钮触发信号
    connect(ui->login_btn,&QPushButton::clicked,this,[=](){

       // 存储登录信息
       QString u_text = ui->num_text->text();
       QString p_text = ui->pwd_text->text();

        // 如果用户选择了记住密码，则将用户名和密码保存到设置中
        if(ui->rem_pwd->isChecked())
        {
            QSettings settings("MyApp","LOginWidget");
            settings.setValue("username", u_text);
            settings.setValue("password", p_text);
            settings.setValue("rememberPassword", true);
        }
        else
        {
            QSettings settings("MyApp", "LoginWidget");
            settings.remove("username");
            settings.remove("password");
            settings.remove("rememberPassword");
        }

        // 如果用户选择了自动登录，则将自动登录状态保存到设置中
        if (ui->log_auto->isChecked())
        {
            QSettings settings("MyApp", "LoginWidget");
            settings.setValue("autoLogin", true);
        }
        else
        {
            QSettings settings("MyApp", "LoginWidget");
            settings.remove("autoLogin");
        }

        //从users.txt文件中读取账号信息.分隔符为 ':'
//        QDir dir;
//        dir.cd(":/");
//        QFile file(":\\users.txt");
        QFile file("./users.txt");
        QStringList accountInfo;
        if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
        {
            qDebug() <<"文件打开失败" ;
            return ;
        }
        else
        {
            // 读取文件所有内容
               QTextStream in(&file);
               while (!in.atEnd())
               {
                   QString line = in.readLine(); // 读取一行数据
                   accountInfo = line.split(":"); // 假设分隔符为":"，可以根据实际情况更
                   if (accountInfo.size() == 2) // 确保每行都包含用户名和密码
                   {
                       info.insert(accountInfo.at(0), accountInfo.at(1)); // 将用户名和密码存入 QMap
                   }
               }
        }file.close();//关闭文件
       //判断文件中有无该键的账号
       if(info.contains(u_text))
       {
           if(info[u_text]==p_text)//判断密码是否正确
           {
           QMessageBox::information(this,"成功","登录成功！");
           //隐藏登录界面
           this->hide();
           //显示功能主界面
           m_function->show();
           }
           else
           {
               QMessageBox::information(this,"失败","密码错误！");
           }
       }
       else
       {
            QMessageBox::information(this,"失败","账号不存在！");
       }

    });

    //显示密码
    connect(ui->out_pwd,&QCheckBox::stateChanged,this,[=](int s){
       if(s==2)
       {
           ui->pwd_text->setEchoMode(QLineEdit::Normal);//设置文本模式
       }
       else
       {
           ui->pwd_text->setEchoMode(QLineEdit::Password);//设置文本模式
       }
    });

    //自动登录
    connect(ui->log_auto,&QCheckBox::stateChanged,this,[=](){
        ui->rem_pwd->setChecked(true);
    });

    //注册触发信号事件
    connect(ui->reg_btn,&QPushButton::clicked,this,[=](){
        QDialog * dialog = new QDialog;
        dialog->resize(400,400);
        dialog->setWindowTitle("账号注册");


        //账号输入
        QLabel * user = new QLabel("账  号：",dialog);
        user->move(20,20);
        QLineEdit * user_text = new QLineEdit(dialog);
        user_text->move(90,20);

        //密码输入
        QLabel * pwd = new QLabel("密  码：",dialog);
        pwd->move(20,60);
        QLineEdit * pwd_text = new QLineEdit(dialog);
        pwd_text->move(90,60);
        pwd_text->setMaxLength(8);

        //密码输入
        QLabel * pwd1 = new QLabel("确认密码：",dialog);
        pwd1->move(20,100);
        QLineEdit * pwd1_text = new QLineEdit(dialog);
        pwd1_text->move(90,100);
        pwd1_text->setMaxLength(8);
        dialog->setAttribute(Qt::WA_DeleteOnClose);

        //因为 ui 里面的密码可以输入 中文，这是不可取的，因此我们需要改变 其属性
        user_text->setMaxLength(10);//设置账号最大长度
        user_text->setAttribute(Qt::WA_InputMethodEnabled,false);//设置登录界面账号属性
        pwd_text->setMaxLength(8);//设置密码最大长度
        pwd_text->setAttribute(Qt::WA_InputMethodEnabled,false);//设置登录界面密码属性
        pwd1_text->setMaxLength(8);//设置密码最大长度
        pwd1_text->setAttribute(Qt::WA_InputMethodEnabled,false);//设置登录界面确认密码属性

        //按钮
        QPushButton * btn1 = new QPushButton("确认注册",dialog);
        btn1->move(60,130);
        QPushButton * btn2 = new QPushButton("返回登录",dialog);
        btn2->move(180,130);


        connect(btn1,&QPushButton::clicked,this,[=](){
            //获取输入账号密码
            QString u_text = user_text->text();
            QString p_text = pwd_text->text();
            //限制注册账号密码不为空
            if(user_text->text().length()==0)
            {
                QMessageBox::information(this,"注册","账号不能为空");
                return ;
            }
            if(pwd_text->text().length()==0||pwd1_text->text().length()==0)
            {
                QMessageBox::information(this,"注册","密码不能为空");
                return ;
            }

            //确认密码是否一致
           if(pwd_text->text()==pwd1_text->text())
           {
            if(info.find(u_text)==info.end())
            {
                dialog->close();
                info.insert(u_text,p_text);
                QMessageBox::information(this,"注册","注册成功");

                //将账号信息存储到txt文件中
//                QFile file("G:\\QTproject\\Day9\\user\\users.txt");
                QFile file("./users.txt");
                if(!file.open(QIODevice::ReadWrite|QIODevice::Append))
                {
                    qDebug() <<"文件打开失败" ;
                    return ;
                }
                else
                {
                    file.write(u_text.toUtf8() + ":" + p_text.toUtf8()+ "\n");//信息写入文件

                }file.close();

            }
            else
            {
                QMessageBox::critical(this,"注册","已被注册");
            }
           }
           else
           {
               QMessageBox::critical(this,"注册","密码不一致!");
           }
        });

        connect(btn2,&QPushButton::clicked,this,[=](){
            dialog->close();
            QMessageBox::critical(this,"关闭","取消注册");
        });
        //暂停显示注册对话框
        dialog->exec();
    });

    //存储登录信息，判断是否选中自动登录
    QSettings settings("MyApp", "LoginWidget");
            if (settings.contains("username"))
            {
                //保存账号
                QString savedUsername = settings.value("username").toString();
                ui->num_text->setText(savedUsername);
            }
            if (settings.contains("password"))
            {
                //保存密码
                QString savedPassword = settings.value("password").toString();
                ui->pwd_text->setText(savedPassword);
            }
            if (settings.contains("rememberPassword"))
            {
                //保存记住密码复选框
                bool rememberPassword = settings.value("rememberPassword").toBool();
                ui->rem_pwd->setChecked(rememberPassword);
            }
            if (settings.contains("autoLogin"))
            {
                //保存
                bool autoLogin = settings.value("autoLogin").toBool();
                ui->log_auto->setChecked(autoLogin);
            }

            // 如果勾选了自动登录，则执行登录操作
            if (ui->log_auto->isChecked())
            {
                ui->login_btn->click();//点击登录按钮
            }
            else
            {
                this->show();//无勾选则显示登录界面
            }

            //主功能界面返回显示登录界面
            connect(m_function,&main_function::back_home,this,[=](){
                this->show();
            });

}

login_window::~login_window()
{
    delete ui;
}



